#ifndef PARSER_HPP
#define PARSER_HPP

#include "lexer.hpp"

class Node;
class CmpNode;

class Parser {
private:
    Lexer* _lex;
    Token* _cur_token;
    
public:
    Parser(Lexer* lex);
    void eval();
    
    void consume();
    Token* get_token();
    void match(TokenType tt);
    
    Node* stmts();
    Node* stmt();
    Node* print_stmt();
    Node* if_stmt();
    Node* condition();
    Node* code_block();

    CmpNode* cmp_op();
    Node* expression();
    Node* or_test();
    Node* and_test();
    Node* not_test();
    Node* comparison();
    Node* or_expr();
    Node* xor_expr();
    Node* and_expr();
    Node* shift_expr();
    Node* arith_expr();
    Node* term();
    Node* factor();
    int stoi(Token* data);
};

void eval(const char* s);

#endif

